package InterviewTest.q0107_rotate;

public class Solution {
    public void rotate(int[][] matrix) {
        int n = matrix.length;
        int binValue = 0;
        // x1实际上对应的是我们当前旋转的层
        // 比如一个3阶矩阵 可以看作最外面一层 和 中间一个数
        // 5阶矩阵 则就有三层 一个边长为5 一个被包住 边长为3 最后是中间一个数
        // 我们只需要旋转对应的层数即可 也就是x1 < n / 2 中间的数不用旋转
        for ( int x1 = 0; x1 < n / 2; x1 ++) {
            // y1则代表当前层每次旋转的数量 例如 123 456 789 这个三阶矩阵
            // 我们针对最外层 那么旋转时 应该考虑 12 和 36 交换 然后 36 和 89 等等
            // 而不是123 和369交换 会导致重复的交换
            // 所以y1 < n - 1 - x1;
            for (int y1 = x1; y1 < n - 1 - x1; y1++) {
                // 最后是交换的次数 由于是旋转 需要交换四次
                int FirstValue = matrix[x1][y1];
                for (int j = 0; j < 4; j++) {
                    // System.out.print("此时是:" + FirstValue);
                    int bin = x1;
                    x1 = y1;
                    y1 = (n - 1) - bin;
                    // System.out.println(" 然后存取:" + matrix[x1][y1]);

                    binValue = matrix[x1][y1];
                    matrix[x1][y1] = FirstValue;
                    FirstValue = binValue;
                }
            }
        }
    }
}
